/**
 * Copyright (C) Baidu Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.rubik.publish.task.provider

import com.ktnail.x.emptyRecursively
import com.rubik.context.extra.rubikTask
import com.rubik.publish.exception.RubikNoClassesToJarException
import com.rubik.publish.publication.Jar
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.jvm.tasks.Jar as JarPackage

class JarTaskProvider(val project: Project) {
    fun getByLib(lib: Jar): Task {
        return project.rubikTask(
            lib.jarTaskName,
            JarPackage::class.java
        ) { task ->
            task.from(lib.jarFromDir)
            task.archiveBaseName.set(lib.artifactId)
            task.destinationDirectory.set(lib.jarToDir)
        }.doFirst {
            if (lib.jarFromDir.emptyRecursively()) {
                throw RubikNoClassesToJarException(lib.jarFromDir.absolutePath)
            }
            lib.jarToDir.deleteRecursively()
            lib.jarToDir.mkdirs()
        }
    }
}